package com.dpj.nio.c1;

import java.nio.ByteBuffer;

public class TestBufferExam {
    public static void main(String[] args) {
        /*
        网络上有多条数据发送给服务端，数据之间使用 \n 进行分隔
        但由于某种原因这些数据在接收时，被进行了重新组合，例如原始数据有3条为

                 Hello,world\n
                  I’m Nyima\n
                  How are you?\n
          变成了下面的两个 byteBuffer (粘包，半包)
                 Hello,world\nI’m Nyima\nHo
                  w are you?\n

         现在要求你编写程序，将错乱的数据恢复成按原始的按 \n 分隔的数据
         */

        ByteBuffer source = ByteBuffer.allocate(32);
        source.put("Hello,world\nI'm zhangsan\nHo".getBytes());
        split(source);
        source.put("w are you?\n".getBytes());
        split(source);

    }

    private static void split(ByteBuffer source){
        source.flip();
        for (int i=0;i<source.limit();i++){
            //找到一条完整消息
            if (source.get(i)=='\n') {
                //把这条消息存入到新的ByteBuffer

                int length=i+1-source.position();
                ByteBuffer target = ByteBuffer.allocate(length);

                //从source读 向target写
                for(int j=0;j<length;j++){
                    target.put(source.get());
                }
                ByteBufferUtil.debugAll(target);

            }
        }
        source.compact();
    }
}
